/**
 * @author: li_jian
 * @version: 1.0
 * @date: 2020/7/5 21:42
 * @description： @link{https://www.nowcoder.com/practice/4060ac7e3e404ad1a894ef3e17650423?tpId=13&&tqId=11155&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking}
 */
public class JZ22_替换空格 {

    /**
     * 使用双指针解法
     * 1、先遍历字符串，如果遇到空格就在原字符串末尾加上两个空格
     * 2、使用指针p1和p2分别指向原来字符串的末尾和当前字符串的末尾位置，从后向前遍历
     * 如果p1为空格就在p2的位置加上%20（注意从后往前加的顺序为02%），如果p1为字符就将
     * p2指向的位置替换为p1位置的字符
     * 3、如果p1<0且p2<=p1，则遍历结束
     *
     * @param str
     * @return
     */
    public String replaceSpace(StringBuffer str) {
        int p1 = str.length() - 1;

        for (int i = 0; i <= p1; i++) {
            if (' ' == str.charAt(i))
                str.append("  ");
        }

        int p2 = str.length() - 1;

        while (p1 >= 0 && p2 > p1) {
            char c = str.charAt(p1--);
            if ( c== ' ') {
                str.setCharAt(p2--,'0');
                str.setCharAt(p2--,'2');
                str.setCharAt(p2--,'%');
            }else {
                str.setCharAt(p2--, c);
            }
        }

        return str.toString();
    }
}
